#include "AddFriend.h"
#include "ui_AddFriend.h"

AddFriend::AddFriend(QString id,QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::AddFriend)
    ,m_id(id)
{
    ui->setupUi(this);
}

AddFriend::~AddFriend()
{
    delete ui;
}

void AddFriend::addLabelToLayout(const QString &text, QLayout *layout)
{
    QLabel *label = new QLabel();
    label->setText(text);
    label->setAlignment(Qt::AlignCenter);
    layout->addWidget(label);
}

void AddFriend::onFriendInfo(const QJsonObject &jsonObj)
{
    // 先清空布局中的所有元素
    QLayoutItem *child;
    while ((child = ui->verticalLayout->takeAt(0)) != nullptr) {
        // 移除并删除布局中的每个控件
        if (child->widget()) {
            child->widget()->deleteLater();
        }
        delete child;
    }

    // 先判断是否查询成功
    if(jsonObj["reply"].toString() == "faild"){
        // UI显示为：为查询到此人
        addLabelToLayout("未查询到此人",ui->verticalLayout);
    }
    else if(jsonObj["reply"].toString() == "repeat"){
        addLabelToLayout("对方已经是你的好友",ui->verticalLayout);
    }
    else if(jsonObj["reply"].toString() == "succeed"){
        // 显示信息到UI上的逻辑(头像、昵称、账号、性别、个性签名)
        // 处理第一行的头像显示
        QLabel *avatarLabel = new QLabel();
        avatarLabel->setFixedSize(100,100);

        QByteArray byteArray = QByteArray::fromBase64(jsonObj["avatar"].toString().toUtf8());
        QImage image = QImage::fromData(byteArray);
        if(image.isNull()){
            image.load(":/images/login/defult_avatar.png");
        }
        QPixmap pixmap = QPixmap::fromImage(image);
        avatarLabel->setPixmap(pixmap.scaled(100,100,Qt::KeepAspectRatioByExpanding,Qt::SmoothTransformation));

        ui->verticalLayout->addWidget(avatarLabel,0,Qt::AlignCenter);// 添加到总布局

        // 处理第二行的昵称显示/第三行的账号显示/第四行的性别显示/第五行的个性签名显示
        addLabelToLayout(jsonObj["nickname"].toString(),ui->verticalLayout);
        addLabelToLayout(jsonObj["id"].toString(),ui->verticalLayout);
        addLabelToLayout(jsonObj["gender"].toString(),ui->verticalLayout);
        addLabelToLayout(jsonObj["signature"].toString(),ui->verticalLayout);

        // 处理最后一行的按钮（发送好友申请按钮）
        QPushButton* sendBtn = new QPushButton();
        sendBtn->setText("发送好友申请");
        sendBtn->setFixedSize(100,40);
        ui->verticalLayout->addWidget(sendBtn, 0, Qt::AlignHCenter);// 添加到总布局
        connect(sendBtn,&QPushButton::clicked,this,&AddFriend::onSendBynClicked);
        connect(sendBtn,&QPushButton::clicked,sendBtn,&QPushButton::hide);// 被点击后就隐藏
    }

    // 恢复UI
    ui->idLineEdit->setEnabled(true);
    ui->searchBtn->setEnabled(true);
}

void AddFriend::onSendBynClicked()
{
    emit addFriendRequest(m_search_id);
}

void AddFriend::on_searchBtn_clicked()
{
    // 检查账号是否为空
    if(ui->idLineEdit->text().isEmpty()){
        QMessageBox::warning(this,"警告","请输入账号");
        return;
    }

    // 检查账号是否合理（12位）
    if(ui->idLineEdit->text().size() != 12){
        QMessageBox::warning(this,"警告","账号非法（12位）");
        return;
    }

    // 检查是否是自己的
    if(ui->idLineEdit->text() == m_id){
        QMessageBox::warning(this,"警告","不能使用自己的账号");
        return;
    }

    m_search_id = ui->idLineEdit->text();
    // 发送信号
    emit askForFriendInfo(ui->idLineEdit->text());

    // 收到回复前，输入框和按钮都不能被点击
    ui->idLineEdit->setEnabled(false);
    ui->searchBtn->setEnabled(false);
}

